#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
班次配置补丁

为config_params.py提供补丁，添加新的班次配置，但不修改原有配置。
这样可以在不影响原有功能的情况下，逐步过渡到新的班次标识符。

作者: AI助手
日期: 2023-05-21
"""

# 新的班次配置（使用one_shift等作为键）
new_shift_config = {
    "one_shift": {
        "start_time": "06:00",
        "end_time": "14:00",
        "name": "班次1",
        "order": 1,
        "legacy_id": "morning_shift"  # 对应的旧标识符
    },
    "two_shift": {
        "start_time": "14:00",
        "end_time": "22:00",
        "name": "班次2",
        "order": 2,
        "legacy_id": "afternoon_shift"  # 对应的旧标识符
    },
    "three_shift": {
        "start_time": "22:00",
        "end_time": "06:00",
        "name": "班次3",
        "order": 3,
        "legacy_id": "night_shift"  # 对应的旧标识符
    }
}

# 新的班制模式配置（使用one_shift等作为班次标识符）
new_shift_mode_config = {
    "one_shift_mode": {
        "name": "一班制",
        "shifts": ["one_shift"],
        "description": "全天24小时一个班次",
        "hours_per_shift": 24.0,
    },
    "two_shift_mode": {
        "name": "二班制",
        "shifts": ["one_shift", "two_shift"],
        "description": "全天分为两个班次，每班12小时",
        "hours_per_shift": 12.0,
    },
    "three_shift_mode": {
        "name": "三班制",
        "shifts": ["one_shift", "two_shift", "three_shift"],
        "description": "全天分为三个班次，每班8小时",
        "hours_per_shift": 8.0,
    }
}

# 新的班次控制参数（使用one_shift等作为班次标识符）
new_shift_control = {
    "enabled_shifts": ["one_shift", "two_shift", "three_shift"],
    "min_shifts_per_day": 1,
    "max_shifts_per_day": 3,
    "allow_empty_shifts": True,
    "shift_sort_method": "time",
    "auto_adjust_time": True,
}

# 班次标识符映射表
shift_id_mapping = {
    # 数字到新内部标识符的映射
    "numeric_to_internal": {
        "1": "one_shift",
        "2": "two_shift",
        "3": "three_shift"
    },
    # 新内部标识符到数字的映射
    "internal_to_numeric": {
        "one_shift": "1",
        "two_shift": "2",
        "three_shift": "3"
    },
    # 新内部标识符到旧内部标识符的映射
    "internal_to_legacy": {
        "one_shift": "morning_shift",
        "two_shift": "afternoon_shift",
        "three_shift": "night_shift"
    },
    # 旧内部标识符到新内部标识符的映射
    "legacy_to_internal": {
        "morning_shift": "one_shift",
        "afternoon_shift": "two_shift",
        "night_shift": "three_shift"
    }
}

# 班制模式映射表
shift_mode_mapping = {
    # 数字到班制模式的映射
    "numeric_to_mode": {
        1: "one_shift_mode",
        2: "two_shift_mode",
        3: "three_shift_mode"
    },
    # 旧班制模式到新班制模式的映射
    "legacy_to_new": {
        "one_shift": "one_shift_mode",
        "two_shift": "two_shift_mode",
        "three_shift": "three_shift_mode"
    }
}

# 特性开关
feature_flags = {
    "use_new_shift_ids": False,  # 是否使用新的班次标识符
    "use_new_shift_config": False,  # 是否使用新的班次配置
    "enable_numeric_params": True,  # 是否启用数字参数
}

def apply_patch():
    """应用补丁，将新配置合并到原配置中"""
    from config_params import shift_config, shift_mode_config, shift_control
    
    # 合并班次配置
    for shift_id, config in new_shift_config.items():
        if shift_id not in shift_config:
            shift_config[shift_id] = config
    
    # 合并班制模式配置
    for mode, config in new_shift_mode_config.items():
        if mode not in shift_mode_config:
            shift_mode_config[mode] = config
    
    # 不修改班次控制参数，避免影响现有功能
    
    return {
        "shift_config": shift_config,
        "shift_mode_config": shift_mode_config,
        "shift_control": shift_control
    }
